<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>javascript</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box
    }
    body {
      font-size: 14px;
      padding: 20px;
    }
    ul li {
      line-height: 30px;
    }
  </style>
</head>
<body>
    <input type="text" value="" />
    <input type="text" value="" />
</body>
<script src="https://cdn.bootcss.com/vue/2.6.8/vue.js"></script>
<script>
    var inpList = document.querySelectorAll('input');
    /**
     * @des 定义防抖函数
     * @param { function } handler 执行的回调函数
     * @param { nubmer } time 延迟执行的时间 
     */
    function deboundce(handler, time) {
      console.log('执行')
      // 定义一个时间变量，
      let timer
      // 返回一个匿名函数，形成闭包
      return function() {
        // 每次执行方法时，都先清空，延迟执行函数
        if (timer) clearTimeout(timer)
        // 清除后，再次设立新的延迟函数
        timer = setTimeout(() => {
          handler.apply()
        }, time)
      }
    }
    function $ajax() {
      console.log(arguments)
      console.log(this.value)
    }
    // inpList.forEach(inp => {
    //   inp.oninput = deboundce($ajax(1,2,3), 2000)
    // })
    /**
     * @desc 节流函数，在一定的时候内只执行一次 
     * @param { function } func 执行的回调函数
     * @param { nubmer } wait 延迟执行毫秒数
     */
    function throttle(func, wait) {
      let timer
      return function() {
        // 如果存在定时器，则不执行
        if (timer) return
        // 如果不存在执行函数并启用定时器
        func.apply()
        timer = setTimeout(() => {
          timer = null
        }, wait)
      }
    }
    // inpList.forEach(inp => {
    //   inp.oninput = throttle($ajax, 2000)
    // })
    /**
     * 节流函数时间戳方法
     *  
     */
    function throttleTime(func, time){
      let prevTime = 0
      return function(){
        let nowTime = new Date().getTime()
        if(nowTime - prevTime > time) {
          func.apply()
          prevTime = nowTime
        }
      }
    }
    inpList.forEach(inp => {
      inp.oninput = throttleTime($ajax, 2000)
    })
</script>
</html>